package com.firstgroup.repository;

import com.firstgroup.Utils.ResponseResult;
import com.firstgroup.domain.Interviewers;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface InterviewersRepository extends JpaRepository<Interviewers, Integer> {
    /**
     * 找到面试的相关信息
     *
     * @param studentId 学号
     * @return 返回一个对象
     */
    @Query(value = "select * from interviewers where  student_id=?1 order by regist_time desc limit 1 ",nativeQuery = true)
    Interviewers findInterviewersByStudentId(String studentId);

    /**
     * 根据状态查找所有
     *
     * @param state 状态吗
     * @return 返回一个集合
     */
    List<Interviewers> findAllByState(String state);

    //List<Interviewers> findAllByInterviewersId();
    Interviewers findByInterviewersId(int interviewerId);

    /**
     * 根据学号查找对象
     *
     * @param studentId 学号
     * @return 返回一个数据值
     */
    Interviewers findByStudentId(String studentId);



    /**
     * 设置面试人员的面试时间和地点
     *
     * @param place     地点
     * @param time      时间
     * @return 返回一个数据
     */
    @Query("update Interviewers set place=?1,time=?2 where interviewersId=?3")
    @Modifying
    int setPlaceAndTime(@Param("place") String place, @Param("time") String time, @Param("interviewsId") Integer interviewsId);

    /**
     * 上传首页简历
     *
     * @param firstPath 首页简历的地址
     * @param interviewId 学号
     * @return 返回一个int 数字
     */
    @Query("update Interviewers set firstPath=?1 where interviewersId=?2")
    @Modifying
    int updateFirst(String firstPath, Integer interviewId);

    /**
     * 上传简历背面
     *
     * @param nextPath  背面简历的地址
     * @param interviewId 学号
     * @return 返回一个int 数字
     */
    @Query("update Interviewers set nextPath=?1 where interviewersId=?2")
    @Modifying
    int updateNext(String nextPath, Integer interviewId);

    @Query("select q from Interviewers q where q.name like %?1% ")
    List<Interviewers> findInterByName(String name);


    List<Interviewers> findInterviewersByState(String state);

    /**
     * 根据名字模糊查询
     */
    List<Interviewers> findByNameLike(String name);
//    @Query("select q from Interviewers q where YEAR(q.registTime) =?1")
//    List<Interviewers> findByYearAndMonth(String registTime);

    /**
     * 根据班级进行查询
     * @param classes 表示内容
     * @return  返回一个结果集，装的时所有的结果
     */
    List<Interviewers> findInterviewersByClassesLike(String classes);

    /**
     * 根据面试官模糊查询
     * @param user
     * @return
     */
    List<Interviewers> findByUserLike(String user);
    /**
     * 更新面试人员信息
     * @param name 姓名
     * @param qq qq号
     * @param studentId 学号
     * @param classes 班级
     * @param telephone 电话
     * @param sex 性别
     * @param id 面试人员的id
     * @return 返回一个 数据值表示数据更新完成
     */
    @Query("update Interviewers set name=?1,classes=?4 ,qq=?2 , Telephone=?5,sex=?6,studentId=?3 where interviewersId=?7")
    @Modifying
    int updateInterviews(String name, String qq, String studentId, String classes, String telephone, String sex,Integer id);

    @Query("update Interviewers set place=?2,time=?3 where state=?1")
    @Modifying
    int updateTimeAndPlace(String state,String place,String time);

    @Query("update Interviewers set user=?1 where interviewersId=?2")
    @Modifying
    int saveUsers(String user,int interviewersId);

    /**
     * 根据ID查找面试人员
     * @param id id
     * @return 返回一个用户值，如果存在就返回，反之Interviews位nulL
     */
    Interviewers findInterviewersByInterviewersId(Integer id);


    /**
     * 根据年份查找
     * @param year
     * @return
     */
    @Query("select  q from Interviewers q where q.registTime like CONCAT('%',?1,'%') ")
    List<Interviewers> findByYear(String year);

    @Query("select q from Interviewers q where q.studentId in " +
            "(select s.studentId from Interviewers s group by s.studentId having count (s.studentId)>1)" +
            "order by q.registTime")
    List<Interviewers> findStudentIdByRepeat();


    /**
     * 查找所有 -根据学号
     * @param studentId 学号
     * @return 返回一个List集合
     */
    @Query("select q from Interviewers q where q.studentId in " +
            "(select s.studentId from Interviewers s group by s.studentId having count (s.studentId)>1)" +
            "and q.studentId=?1  order by q.registTime desc")
    List<Interviewers> findAllInterviewersByStudentId(String studentId);






}
